iT邦幫忙

第 11 屆 iThome 鐵人賽

0

雖已完成30天,但學習必須要續而不斷。
正所謂『傲不可長,欲不可縱,樂不可極,志不可滿』,還是要把這系列做滿。
歇息一陣子繼續進度條~~


檔案權限

windows權限:第25天
linux權限:第26天
之前的觀念與指令介紹完,現在就要正式運用在python上了。

  • os.chmod()

此套件適用在linux平台,而用法與原指令一樣。

os.chmod(file , 0oxxxx) #要採用八進位
#file可為絕對位置或檔案

Ex:

有個路徑:\789\123\123.txt
os.chmod("123.txt" , 0o4577)
os.chmod("123" , 0o1111)
#os.chmod("\\789\\123\\123.txt" , 0o7777) #沒有權限再調整
os.chmod("123" , 0o7777)

須注意的是,程式執行有優先順序(像123.txt最後輸出權限為chmod7777)。
但123目錄權限就會修改失敗,因為它早就是唯讀檔了(chmod1111)。

注意:絕對路徑一定要用 "\\" (之前有談到python的 "\" 是跳脫保留字)

  • os.system("attrib ...")

因為attrib本來就是windows指令,那用os.system就可下指令了

import os
os.system("@echo off") #關閉所有echo
os.system("attrib +r -h -s D:\testALL&code\rase30d /s /d")

須注意,os.system方法是呼叫cmd來執行指令(會打開cmd)。
所以要注意別echo到~

Ex:(批次處理權限)

import os
os.system("@echo off") #關閉所有echo
wkls = int(input("寫入內容:"))
for i in range(0,10):
    i+=1
    kls = open("檔案%d.txt" %i , 'w+')
    kls.write("%s" %wkls )
    kls.close()
    os.system(u"attrib +r +h +s +i 檔案%d.txt" %i)

這樣檔案就只能在此程式中做變動了。


split()

有時候為了存取某個檔案名稱需要用到abs位置,但畢竟只要存取檔案名而已。
那就可使用split()來做:

file.split("重複的分隔符" , 陣列位置) #file為變數

string = "a#b#c#d#e#f#g"
sp1 = string.split("#" , 0)
sp2 = string.split("#" , 1)
sp3 = string.split("#" , 5)
print(sp1 , sp2 , sp3 ,sep="\n")

Out[ ] :
['a#b#c#d#e#f#g']
['a', 'b#c#d#e#f#g']
['a', 'b', 'c', 'd', 'e', 'f#g']
['a', 'b', 'c', 'd', 'e', 'f', 'g']

split()會把執行完的字串存成陣列,所以印出內容就為陣列位置。
就因為是陣列,所以要用split讀取位置可用此。

file.split("重複的分隔符")[陣列位置]

string = "a#b#c#d#e#f#g"

sp3 = string.split("#")[5]
sp2 = string.split("#")[0]
sp1 = string.split("#")[-1]
print(sp1  ,sp2, sp3 ,sep="\n")

Ex:獲取目錄的檔案名稱(使用abs路徑)

import os
a = int(input("要多少檔案"))
for i in range(0, a):
    i += 1
    open("%d.js" % i, 'w+')
    lnk = os.path.abspath("%d.js" % i)   #絕對路徑
    lnk_n = lnk.split("\\")[-1]
    print(lnk_n)

上一篇
[D30] pythonOS:系統指令和應用
下一篇
[D32] pythonOS:結構批量資料處理
系列文
從寫程式到脫離菜雞的歷練(以python為主的資處與檔案權限)32
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言